/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Batch.Helpers;
import com.tida.servir.entities.*;
import java.io.File;
import java.io.FileOutputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
import org.hibernate.Session;
import org.apache.poi.hssf.usermodel.*;
/**
 *
 * @author arson
 */
public class GeneracionXLS {
    
    public static final String ERROR_GENERANDO_EL_ARCHIVO = "Error generando el archivo: ";
    
    public static String leoCampo(String valor) {        
        if (valor == null) {
            return "";
        }
        if ("".equals(valor.trim())) {
            return "";
        }
        return valor; 
    }
    
    public static String datoAuxiliarToString(DatoAuxiliar valor) {
        if (valor == null) {
            return "";
        }
        return String.valueOf(valor.getCodigo());
    }
    private static String BoolFrom(Boolean estado){
        if (estado!=null) {
            if(estado)
                return "1";
            else
                return "0";
        }
        return "";
    }
    public static String datetoString(Date valor) {
        SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");        
        if (valor == null) {
            return "";
        }
        return sdf.format(valor);
    }
    
    
    public List<String> generadoXLSEntidad(Entidad oi,String path,Session session){
        List<String> errores = new LinkedList<String>();
        try{
            HSSFWorkbook objWB = new HSSFWorkbook();
            HSSFSheet hoja1 = objWB.createSheet("Entidad"); 
            //titulos
            HSSFRow fila = hoja1.createRow((short)(0));
            HSSFCell celda;
            celda= fila.createCell((short)0);
            celda.setCellValue("Codigo Servir");
            celda= fila.createCell((short)1);
            celda.setCellValue("Nivel de Gobierno");
            celda= fila.createCell((short)2);
            celda.setCellValue("Organizacion del estado");
            celda= fila.createCell((short)3);
            celda.setCellValue("Sector del Gobierno");
            celda= fila.createCell((short)4);
            celda.setCellValue("Tipo de Organismo");
            celda= fila.createCell((short)5);
            celda.setCellValue("Denominacion de la Entidad");
            celda= fila.createCell((short)6);
            celda.setCellValue("Siglas de la Entidad");
            celda= fila.createCell((short)7);
            celda.setCellValue("Numero de RUC");
            celda= fila.createCell((short)8);
            celda.setCellValue("Tipo de Via");
            celda= fila.createCell((short)9);
            celda.setCellValue("Descripción de la Via");
            celda= fila.createCell((short)10);
            celda.setCellValue("Tipo de Zona");
            celda= fila.createCell((short)11);
            celda.setCellValue("Descripción de la Zona");
            celda= fila.createCell((short)12);
            celda.setCellValue("Departamento");
            celda= fila.createCell((short)13);
            celda.setCellValue("Provincia");
            celda= fila.createCell((short)14);
            celda.setCellValue("Distrito");
            celda= fila.createCell((short)15);
            celda.setCellValue("Email Institucional");
            celda= fila.createCell((short)16);
            celda.setCellValue("URL de la Entidad");
            celda= fila.createCell((short)17);
            celda.setCellValue("Telefono de la Entidad");
            celda= fila.createCell((short)18);
            celda.setCellValue("Es Subentidad");
            celda= fila.createCell((short)19);
            celda.setCellValue("Tipo de Sub-Entidad");
            celda= fila.createCell((short)20);
            celda.setCellValue("Codigo de la Entidad (CUE) antecesora");
            //data
            fila = hoja1.createRow((short)(1));            
            celda= fila.createCell((short)0);
            celda.setCellValue(leoCampo(oi.getCue_entidad()));
            celda= fila.createCell((short)1);
            celda.setCellValue(datoAuxiliarToString(oi.getNivelGobierno()));
            celda= fila.createCell((short)2);
            celda.setCellValue(datoAuxiliarToString(oi.getOrganizacionEstado()));
            celda= fila.createCell((short)3);
            celda.setCellValue(datoAuxiliarToString(oi.getSectorGobierno()));
            celda= fila.createCell((short)4);
            celda.setCellValue(datoAuxiliarToString(oi.getTipoOrganismo()));
            celda= fila.createCell((short)5);
            celda.setCellValue(leoCampo(oi.getDenominacion()));
            celda= fila.createCell((short)6);
            celda.setCellValue(leoCampo(oi.getSigla()));
            celda= fila.createCell((short)7);
            celda.setCellValue(leoCampo(oi.getRuc()));
            celda= fila.createCell((short)8);
            celda.setCellValue(datoAuxiliarToString(oi.getTipoVia()));
            celda= fila.createCell((short)9);
            celda.setCellValue(leoCampo(oi.getDescvia()));
            celda= fila.createCell((short)10);
            celda.setCellValue(datoAuxiliarToString(oi.getTipoZona()));
            celda= fila.createCell((short)11);
            celda.setCellValue(leoCampo(oi.getDescZona()));
            celda= fila.createCell((short)12);
            celda.setCellValue(datoAuxiliarToString(oi.getDepartamento()));
            celda= fila.createCell((short)13);
            celda.setCellValue(datoAuxiliarToString(oi.getProvincia()));
            celda= fila.createCell((short)14);
            celda.setCellValue(datoAuxiliarToString(oi.getDistrito()));
            celda= fila.createCell((short)15);
            celda.setCellValue(leoCampo(oi.getEmailInstitucional()));
            celda= fila.createCell((short)16);
            celda.setCellValue(leoCampo(oi.getUrlEntidad()));
            celda= fila.createCell((short)17);
            celda.setCellValue(leoCampo(oi.getTelefonoEntidad()));
            celda= fila.createCell((short)18);
            celda.setCellValue(BoolFrom(oi.getEsSubEntidad()));
            celda= fila.createCell((short)19);
            celda.setCellValue(datoAuxiliarToString(oi.getTipoSubEntidad()));
            celda= fila.createCell((short)20);
            if(oi.getEntidad()!=null && !oi.getEntidad().equals(""))
                celda.setCellValue(leoCampo(oi.getEntidad().getCue_entidad()));
            else
                celda.setCellValue("");         
            
            ajustaColumnas(hoja1);
            //generar
            File objFile = new File(path);
            FileOutputStream archivoSalida = new FileOutputStream(objFile);
            objWB.write(archivoSalida);
            archivoSalida.close();
        }catch(Exception e){
            errores.add(ERROR_GENERANDO_EL_ARCHIVO + "xxxENTIDAD.xls");
        }
        return errores;
    }
        
    public List<String> generadoXLSConsultaSancionados(List<LkBusquedaSancion> lcr,String path,Session session){
        List<String> errores = new LinkedList<String>();
        try{
            HSSFWorkbook objWB = new HSSFWorkbook();
            HSSFSheet hoja1 = objWB.createSheet("Consulta Sancionados"); 
            //titulos
            HSSFRow fila = hoja1.createRow((short)(0));
            HSSFCell celda;
            celda= fila.createCell((short)0);
            celda.setCellValue("Sancionado");
            celda= fila.createCell((short)1);
            celda.setCellValue("Tipo Documento Identidad");
            celda= fila.createCell((short)2);
            celda.setCellValue("Num. Doc. Sancionado"); 
            celda= fila.createCell((short)3);
            celda.setCellValue("Institucion"); 
            celda= fila.createCell((short)4);
            celda.setCellValue("Direccion Institucion");
            celda= fila.createCell((short)5);
            celda.setCellValue("Cargo"); 
            celda= fila.createCell((short)6);
            celda.setCellValue("Tipo Doc. Notifica");  
            celda= fila.createCell((short)7);
            celda.setCellValue("Descripcion Doc. Notifica");  
            celda= fila.createCell((short)8);
            celda.setCellValue("Fecha Doc. Notifica");   
            celda= fila.createCell((short)9);
            celda.setCellValue("Tipo Doc. Sanciona");  
            celda= fila.createCell((short)10);
            celda.setCellValue("Descripcion Doc. Sanciona");  
            celda= fila.createCell((short)11);
            celda.setCellValue("Fecha Doc. Sanciona");  
            celda= fila.createCell((short)12);
            celda.setCellValue("Autoridad Sanciona");  
            celda= fila.createCell((short)13);
            celda.setCellValue("Tipo Sancion");  
            celda= fila.createCell((short)14);
            celda.setCellValue("Estado");  
            celda= fila.createCell((short)15);
            celda.setCellValue("Inicio Inhabilitacion");  
            celda= fila.createCell((short)16);
            celda.setCellValue("Fin Inhabilitacion");  
            celda= fila.createCell((short)17);
            celda.setCellValue("Tiempo Restante");  //
            celda= fila.createCell((short)18);
            celda.setCellValue("Causa Destitucion");  
            celda= fila.createCell((short)19);
            celda.setCellValue("Observaciones");
            celda= fila.createCell((short)20);
            celda.setCellValue("Fecha Creacion");
            
            
            for (int i=0;i<lcr.size();i++) {
                LkBusquedaSancion cr=(LkBusquedaSancion)lcr.get(i);
                fila = hoja1.createRow((short)(i+1));            
                celda= fila.createCell((short)0);
                if(cr.getEstrabajador()==true){
                    celda.setCellValue(leoCampo(cr.getB_datos_trabajador())); // Es un trabajador
                }else{
                    celda.setCellValue(leoCampo(cr.getB_datos_persona())); // Es una persona
                }
                celda= fila.createCell((short)1);
                celda.setCellValue(leoCampo(cr.getTipo_doc_identidad()));
                celda= fila.createCell((short)2);
                if(cr.getEstrabajador()==true){
                    celda.setCellValue(leoCampo(cr.getNro_doc_persona())); //Nro docuento persona
                }else{
                    celda.setCellValue(leoCampo(cr.getNro_doc_trabajador()));  //Nro documento trabajador
                }
                celda= fila.createCell((short)3);
                celda.setCellValue(leoCampo(cr.getEntidad_subentidad()));
                celda= fila.createCell((short)4);
                celda.setCellValue(leoCampo(cr.getDireccion_entidad()));
                celda= fila.createCell((short)5);
                celda.setCellValue(leoCampo(cr.getPuestocargo()));
                celda= fila.createCell((short)6);
                celda.setCellValue(leoCampo(cr.getTipo_doc_notifica())); 
                celda= fila.createCell((short)7);
                celda.setCellValue(leoCampo(cr.getDescripcionDocNotifica())); 
                celda= fila.createCell((short)8);
                celda.setCellValue(datetoString(cr.getFechaDocNotifica())); 
                celda= fila.createCell((short)9);
                celda.setCellValue(leoCampo(cr.getTipo_doc_sanciona())); 
                celda= fila.createCell((short)10);
                celda.setCellValue(leoCampo(cr.getDescripcionDocSanciona())); 
                celda= fila.createCell((short)11);
                celda.setCellValue(datetoString(cr.getFechaDocSanciona())); 
                celda= fila.createCell((short)12);
                celda.setCellValue(leoCampo(cr.getAutoridadSanciona())); 
                celda= fila.createCell((short)13);
                celda.setCellValue(leoCampo(cr.getTipo_sancion())); 
                celda= fila.createCell((short)14);
                celda.setCellValue(leoCampo(cr.getEstado())); 
                celda= fila.createCell((short)15);
                celda.setCellValue(datetoString(cr.getIniInhabilitacion())); 
                celda= fila.createCell((short)16);
                celda.setCellValue(datetoString(cr.getFinInhabilitacion())); 
                celda= fila.createCell((short)17);
                celda.setCellValue(leoCampo(cr.getTiempo_Restante())); 
                celda= fila.createCell((short)18);
                celda.setCellValue(leoCampo(cr.getCausaDestitucion())); 
                celda= fila.createCell((short)19);
                celda.setCellValue(leoCampo(cr.getObservaciones()));
                celda= fila.createCell((short)20);
                celda.setCellValue(datetoString(cr.getFecha_creacion()));
            }                      
            ajustaColumnas(hoja1);
            //generar
            File objFile = new File(path);
            FileOutputStream archivoSalida = new FileOutputStream(objFile);
            objWB.write(archivoSalida);
            archivoSalida.close();
        }catch(Exception e){
            errores.add(ERROR_GENERANDO_EL_ARCHIVO + "xxxxxConsultaSancionados.xls");
        }
        
        return errores;
    }
    
    
    public List<String> generadoXLSConsultaSancionadosSinRegLab(List<LkBusquedaSancion> lcr,String path,Session session){
        List<String> errores = new LinkedList<String>();
        try{
            HSSFWorkbook objWB = new HSSFWorkbook();
            HSSFSheet hoja1 = objWB.createSheet("Consulta Sancionados"); 
            //titulos
            HSSFRow fila = hoja1.createRow((short)(0));
            HSSFCell celda;
            celda= fila.createCell((short)0);
            celda.setCellValue("Sancionado");
            celda= fila.createCell((short)1);
            celda.setCellValue("Tipo Documento Identidad");
            celda= fila.createCell((short)2);
            celda.setCellValue("Num. Doc. Sancionado"); 
            celda= fila.createCell((short)3);
            celda.setCellValue("Institucion"); 
            celda= fila.createCell((short)4);
            celda.setCellValue("Direccion Institucion");
            celda= fila.createCell((short)5);
            celda.setCellValue("Cargo"); 
            celda= fila.createCell((short)6);
            celda.setCellValue("Tipo Doc. Notifica");  
            celda= fila.createCell((short)7);
            celda.setCellValue("Descripcion Doc. Notifica");  
            celda= fila.createCell((short)8);
            celda.setCellValue("Fecha Doc. Notifica");   
            celda= fila.createCell((short)9);
            celda.setCellValue("Tipo Doc. Sanciona");  
            celda= fila.createCell((short)10);
            celda.setCellValue("Descripcion Doc. Sanciona");  
            celda= fila.createCell((short)11);
            celda.setCellValue("Fecha Doc. Sanciona");  
            celda= fila.createCell((short)12);
            celda.setCellValue("Autoridad Sanciona");  
            celda= fila.createCell((short)13);
            celda.setCellValue("Tipo Sancion");  
            celda= fila.createCell((short)14);
            celda.setCellValue("Estado");  
            celda= fila.createCell((short)15);
            celda.setCellValue("Inicio Inhabilitacion");  
            celda= fila.createCell((short)16);
            celda.setCellValue("Fin Inhabilitacion");  
            celda= fila.createCell((short)17);
            celda.setCellValue("Tiempo Restante");  //
            celda= fila.createCell((short)18);
            celda.setCellValue("Causa Destitucion");  
            celda= fila.createCell((short)19);
            celda.setCellValue("Observaciones");  
            celda= fila.createCell((short)20);
            celda.setCellValue("Fecha Creacion");
            
            
            for (int i=0;i<lcr.size();i++) {
                LkBusquedaSancion cr=(LkBusquedaSancion)lcr.get(i);
                fila = hoja1.createRow((short)(i+1));            
                celda= fila.createCell((short)0);
                if(cr.getEstrabajador()==true){
                    celda.setCellValue(leoCampo(cr.getB_datos_trabajador())); // Es un trabajador
                }else{
                    celda.setCellValue(leoCampo(cr.getB_datos_persona())); // Es una persona
                }
                celda= fila.createCell((short)1);
                celda.setCellValue(leoCampo(cr.getTipo_doc_identidad()));
                celda= fila.createCell((short)2);
                if(cr.getEstrabajador()==true){
                    celda.setCellValue(leoCampo(cr.getNro_doc_trabajador()));  //Nro documento trabajador 
                }else{
                    celda.setCellValue(leoCampo(cr.getNro_doc_persona())); //Nro docuento persona
                }
                celda= fila.createCell((short)3);
                celda.setCellValue(leoCampo(cr.getEntidad_subentidad()));
                celda= fila.createCell((short)4);
                celda.setCellValue(leoCampo(cr.getDireccion_entidad()));
                celda= fila.createCell((short)5);
                celda.setCellValue(leoCampo(cr.getPuestocargo()));
                celda= fila.createCell((short)6);
                celda.setCellValue(leoCampo(cr.getTipo_doc_notifica())); 
                celda= fila.createCell((short)7);
                celda.setCellValue(leoCampo(cr.getDescripcionDocNotifica())); 
                celda= fila.createCell((short)8);
                celda.setCellValue(datetoString(cr.getFechaDocNotifica())); 
                celda= fila.createCell((short)9);
                celda.setCellValue(leoCampo(cr.getTipo_doc_sanciona())); 
                celda= fila.createCell((short)10);
                celda.setCellValue(leoCampo(cr.getDescripcionDocSanciona())); 
                celda= fila.createCell((short)11);
                celda.setCellValue(datetoString(cr.getFechaDocSanciona())); 
                celda= fila.createCell((short)12);
                celda.setCellValue(leoCampo(cr.getAutoridadSanciona())); 
                celda= fila.createCell((short)13);
                celda.setCellValue(leoCampo(cr.getTipo_sancion())); 
                celda= fila.createCell((short)14);
                celda.setCellValue(leoCampo(cr.getEstado())); 
                celda= fila.createCell((short)15);
                celda.setCellValue(datetoString(cr.getIniInhabilitacion())); 
                celda= fila.createCell((short)16);
                celda.setCellValue(datetoString(cr.getFinInhabilitacion())); 
                celda= fila.createCell((short)17);
                celda.setCellValue(leoCampo(cr.getTiempo_Restante())); 
                celda= fila.createCell((short)18);
                celda.setCellValue(leoCampo(cr.getCausaDestitucion())); 
                celda= fila.createCell((short)19);
                celda.setCellValue(leoCampo(cr.getObservaciones())); 
                celda= fila.createCell((short)20);
                celda.setCellValue(datetoString(cr.getFecha_creacion()));
            }                      
            ajustaColumnas(hoja1);
            //generar
            File objFile = new File(path);
            FileOutputStream archivoSalida = new FileOutputStream(objFile);
            objWB.write(archivoSalida);
            archivoSalida.close();
        }catch(Exception e){
            errores.add(ERROR_GENERANDO_EL_ARCHIVO + "xxxConsultaSancionados.xls");
        }
        
        return errores;
    }
    
    private void ajustaColumnas(HSSFSheet hoja) {
        final short numeroColumnas = hoja.getRow(0).getLastCellNum();
        for (int i = 0; i < numeroColumnas; i++) {
            hoja.autoSizeColumn(i);
        }
    }
}
